// ProjectName: go-learn-demo
// PackageName: ybxblog
// Description:
// Author: hy.bai
// Date: 2025-08-13 星期三 16:51

package ybxblog

import (
	"context"
	"log/slog"
	"time"
)

// CustomPrefixHandler是一个自定义的日志处理程序,用于在每条日志前添加前缀
type CustomPrefixHandler struct {
	handler slog.Handler // 通过结构体内嵌实现继承
	prefix  string
}

// NewCustomPrefixHandler函数创建一个新的CustomPrefixHandler
func NewCustomPrefixHandler(handler slog.Handler, prefix string) *CustomPrefixHandler {
	return &CustomPrefixHandler{
		handler: handler,
		prefix:  prefix,
	}
}

// Enabled方法:检查指定级别的日志是否启用
func (handler *CustomPrefixHandler) Enabled(ctx context.Context, level slog.Level) bool {
	return handler.handler.Enabled(ctx, level)
}

// Handle:处理日志记录
func (handler *CustomPrefixHandler) Handle(ctx context.Context, record slog.Record) error {
	// 核心操作: 在每条日志消息前面添加前缀
	record.Message = handler.prefix + " " + record.Message
	record.Time = time.Now()
	return handler.handler.Handle(ctx, record)
}

// WithAttrs:返回一个带有额外属性的新处理程序
func (handler *CustomPrefixHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
	return &CustomPrefixHandler{
		handler: handler.handler.WithAttrs(attrs),
		prefix:  handler.prefix,
	}
}

// WithGroup:返回一个带有指定组的新处理程序
func (handler *CustomPrefixHandler) WithGroup(name string) slog.Handler {
	return &CustomPrefixHandler{
		handler: handler.handler.WithGroup(name),
		prefix:  handler.prefix,
	}
}
